package com.droowa.model.service;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.droowa.domain.CompletePC;
import com.droowa.domain.CompletePCResult;
import com.droowa.domain.FirstCategory;
import com.droowa.domain.Product;

public interface ProductManagementService {

	public abstract void registerFirstCategory(FirstCategory firstCategory) throws SQLException;
	public abstract void modifyFirstCategoryById(FirstCategory firstCategory) throws SQLException;
	public abstract void modifyProductCategoryName(Product product) throws SQLException;
	public abstract void removeFirstCategoryById(String id)throws SQLException;;
	public abstract List<FirstCategory> getCategoryList()throws SQLException;
	public abstract List<FirstCategory> getFixedCategoryList()throws SQLException;
	public abstract List<FirstCategory> getUnFixedCategoryList()throws SQLException;
	public abstract FirstCategory getFirstCategoryById(String categoryId) throws SQLException;
	
	public abstract void registerProduct(Product product) throws SQLException;
	public abstract void modifyProduct(Product product) throws SQLException;
	public abstract void removeProductById(String id) throws SQLException;
	public abstract List<Product> getProductList() throws SQLException;
	public abstract List<Product> getRemovedProductList() throws SQLException;
	public abstract Map getProductListPaging(int page) throws SQLException;
	public abstract Map getRemovedProductListPaging(int page) throws SQLException;
	public abstract Product getProductById(String id) throws SQLException;
	public abstract Map getProductByName(String name, int page) throws SQLException;
	public abstract List<Product> getProductByBrand(String brand) throws SQLException;
	public abstract Map getProductByBrandPaging(String brand, int page) throws SQLException;
	public abstract Map getProductByModelNo(String modelNo, int page) throws SQLException;
	public abstract Map getProductByPriceRange(int sPrice, int ePrice, int page) throws SQLException;
	
	public abstract Map getRProductByName(String name, int page) throws SQLException;
	public abstract List<Product> getRProductByBrand(String brand) throws SQLException;
	public abstract Map getRProductByBrandPaging(String brand, int page) throws SQLException;
	public abstract Map getRProductByModelNo(String modelNo, int page) throws SQLException;
	public abstract Map getRProductByPriceRange(int sPrice, int ePrice, int page) throws SQLException;
	
	public abstract void modifyDelToTrue(Product product) throws SQLException;
	public abstract void modifyDelToFalse(Product product) throws SQLException;
	
	public abstract Map getInventoryList(int page) throws SQLException;
	public abstract void modifySafeInventory(Product product) throws SQLException;
	
	public abstract Map getProductByCategoryName(String categoryName, int page) throws SQLException;
	public abstract Map getRProductByCategoryName(String categoryName, int page) throws SQLException;
	
	public abstract void registerCompletePC(CompletePC completePC) throws SQLException;
	public abstract List<CompletePC> getCompletePCList() throws SQLException;
	public abstract Map getCompletePCListPaging(int page) throws SQLException;
	public abstract Map getCompleteEventPaging(int page) throws SQLException;
	public abstract List getCompleteNameById(String id) throws SQLException;
	public abstract List getCompletePC(String completeId) throws SQLException;
	public abstract CompletePC getCompleteDomain(String completeId) throws SQLException;
	public abstract Map<String, String> getCompletePCById(String completeId) throws SQLException;
	public abstract List<CompletePCResult> getCompletePCByPrice(int sPrice, int ePrice) throws SQLException;
	//public abstract List<CompletePCResult> getCompletePCByCPU(String cpu) throws SQLException;
	public abstract List<CompletePCResult> getCompletePCByCPUBrand(String cpu, String brand) throws SQLException;

	public abstract Map getCompletePCByLow(int page) throws SQLException;
	public abstract Map getCompletePCByHigh(int page) throws SQLException;
	public abstract Map getCompletePCByCPUPaging(int page) throws SQLException;
	public abstract Map getCompletePCByGRAPHICPaging(int page) throws SQLException;
	
	
	public abstract void modifyCompletePC(CompletePC completePC) throws SQLException;
	public abstract void removeCompletePCById(String completeId) throws SQLException;
	public abstract void modifyEventToTrue(CompletePC completePC) throws SQLException;
	public abstract void modifyEventToFalse(CompletePC completePC) throws SQLException;
	public abstract List<CompletePC> getEventList() throws SQLException;
	
	public abstract Map getCompletePCByIdPrice(String completeId);
	public abstract void modifyCompletePCCnt(String completeId, int cnt);
	public abstract CompletePC getCompletePCByIdBasic(String completeId);
	//주문완료시 제품 재고량 --
	public abstract void modifyProductQuantity(String id);

}
